package busterminal.persistence.jdbc.proxy;

import busterminal.entity.BusModel;
import busterminal.entity.service.VehicleType;
import busterminal.persistence.BusModelDAO;
import busterminal.services.ServiceLocator;

/**
 * Класс - заместитель модели автобуса
 */
public class BusModelProxy implements BusModel {

    /**
     * Идентификатор объекта в базе данных
     */
    private int id;
    /**
     * Proxy-объект модели автобуса
     */
    private BusModel proxyObject;

    /**
     * Конструктор по умолчанию
     */
    public BusModelProxy() {
    }

    /**
     * Получить proxy-объект: если он не загружен, то загрузить и получить     
     * @return proxy-объект
     */
    private BusModel getProxy() {
        if (proxyObject == null) {
            proxyObject = ServiceLocator.getService(BusModelDAO.class).read(id);
        }
        return proxyObject;
    }

    /**
     * Получить идентификатор 
     * @return идентификатор
     */
    @Override
    public Integer getId() {
        return id;
    }

    /**
     * Установить идентификатор
     * @param id идентификатор
     */
    @Override
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * Получить название модели
     * @return название модели
     */
    @Override
    public String getModelName() {
        return getProxy().getModelName();
    }

    /**
     * Установить название модели
     * @param modelName название модели
     */
    @Override
    public void setModelName(String modelName) {
        getProxy().setModelName(modelName);
    }

    /**
     * Получить тип транспортного средства
     * @return тип транспортного средства
     */
    @Override
    public VehicleType getVehicleType() {
        return getProxy().getVehicleType();
    }

    /**
     * Установить тип транспортного средства
     * @param vehicleType тип транспортного средства
     */
    @Override
    public void setVehicleType(VehicleType vehicleType) {
        getProxy().setVehicleType(vehicleType);
    }


    /**
     * Метод, возвращающий текстовое представление объекта
     * @return текстовое представление объекта
     */
    @Override
    public String toString() {
        return "BusModelProxy{" + "id=" + id + ", proxyObject=" + getProxy() + '}';
    }
}
